<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // set  map 数据结构 
        // 共同点: es6新增
        //        不接受重复数据 
        
        // set 长的像数组  
        //  类似于数组的数据结构 
        //  按照索引排列的数据结构


     

        //  创建一个set 数据结构  
        //  集合  
        //  var s = new Set([数据1,数据2,...数据n])


        // set 数据结构的属性和方法 

        // 1. size属性 
        //      语法:数据结构.size
        //      返回值: 该数据结构有多少个数据

        // 2. add() 方法 
        //      语法:数据结构.add(数据)
        //      作用: 向该数据结构添加数据
        // 3. has() 方法
        //      语法:数据结构.has(数据) 
        //      返回值: 布尔
        //      true   该数据在数据机构中 
        //      false  该数据不在数据机构中 
        // 4. delete() 方法
        //      语法:数据结构.delete(数据) 
        //      作用: 从数据结构中删除该数据  

        // 5. clear() 方法
        //      语法:数据结构.clear() 
        //      作用: 清空整个数据结构的数据
        // 6. forEach() 方法 
        //     语法: 
        //         数据结构.forEach(function(value,key,origin){})

        // map 长的像对象  
        //  类似于对象的数据结构  它的key 可以是任意数据类型  
        // 可以叫做 值=值的数据结构 

        // 创建 map数据结构
        // var m = new Map([[key,value],[key,value],[key,value]])

        // 1. size属性 
        //      语法:数据结构.size
        //      返回值: 该数据结构有多少个数据

        // 2. set() 方法 
        //      语法:数据结构.set(key,value)
        //      作用: 向该数据结构添加数据
        // 3. get() 方法 
        //      语法:数据结构.get(key)
        //      返回值: 向该数据结构中key对应的value
        // 4. has() 方法
        //      语法:数据结构.has(key) 
        //      返回值: 布尔
        //      true   该数据在数据机构中 
        //      false  该数据不在数据机构中 
        // 5. delete() 方法
        //      语法:数据结构.delete(key) 
        //      作用: 从数据结构中删除该数据  

        // 6. clear() 方法
        //      语法:数据结构.clear() 
        //      作用: 清空整个数据结构的数据
        // 7. forEach() 方法 
        //     语法: 
        //         数据结构.forEach(function(value,key,origin){})



        // set

        // //创建一个集合数据结构 
        // var s = new Set([10,20,30]);
        // // console.log(s);

        // console.log(s.size); // 3

        // var obj = {name:'张三'}
        // s.add(obj);
        
        // s.add({name:'赵四'})
        // console.log(s.size); 
        // console.log(s);


        // has方法 
        // console.log(s.has(10));
        // console.log(s.has(20));
        // console.log(s.has(30));
        // 上面都是true
        // console.log(s.has(obj));
        // console.log(s.has({name:'赵四'})); // 虽然 set中确实有{name:'赵四'}
        // 但是像这样判断 数据是否在集合中  返回false 
        // 因为 {name:'赵四'} 是可变的   不是唯一的 
        // 就好比  你用 十年前的印象 去找现在的人 发现找不到一样 
        //  因为人变化了  
         
        // 集合在查找数据是否在集合中  要求 这个值必须是确定


        // delete方法 
        // s.delete(obj)
        // console.log(s.size);
        // s.delete({name:'赵四'})
        // console.log(s.size);

        // 总结 has  和delete 参数 必须是确定的值
        // 也就是说   必须是变量 或者 基本数据类型 (字符换  数值 布尔 null undefined)

        // clear方法
        // s.clear()
        // console.log(s.size);

        // forEach方法


        // s.forEach((value,key,origin)=>{
        //     // console.log(value);
        //     console.log(value,'-',key,'#',origin);
        //     // key value 都是集合的每个数据 
        // })


        // map  ========================

        var m = new Map([['no1',100],[{name:'牛郎'},{name:'织女'}],[[100],[200]]]);
        
        // console.log(m);

        // set
        m.set('no2',200);
        console.log(m.size);

        // get
        // console.log(m.get('no1'));
        // console.log(m.get('no2'));
        // no1 no2 是字符串  永不改变  是确定的  所以能拿到对应的hi
        // 下面的key 是 复杂数据类型  可变的  得到 undefined
        // console.log(m.get({name:'牛郎'}));
        // console.log(m.get([100]));



        // has
        // console.log(m.has('no1'));
        // console.log(m.has('no2'));

        // 上面是true  下面两个false  实际存在 但是返回false 
        // 因为 key 是复杂数据类型 
        // console.log(m.has({name:'牛郎'}));
        // console.log(m.has([100]));

        // delete 
        // console.log(m.delete('no1'));
        // console.log(m.delete('no2'));
        // console.log(m.size);
        // console.log(m.delete({name:'牛郎'}));
        // console.log(m.delete([100]));
        // console.log(m.size);


        // clear
        // m.clear()
        // console.log(m.size);


        // foreach

        // m.forEach((value,key,origin)=>{
        //     console.log(value,'-',key,'%',origin);
        // })

    </script>
</body>
</html>